社内プロキシサーバと踏み台サーバを経由して多段SSH接続
こんにちは!コンサル部のinomaso(@inomasosan)です。
以前、踏み台サーバ経由の多段SSH接続を、ローカル端末の秘密鍵のみで実施する方法をご紹介しました。
今回は、踏み台サーバのフロントに社内プロキシが存在する場合の接続方法をまとめていきます。
検証環境の構成図
EC2はAmazon Linux 2
で構築しました。
社内プロキシサーバには、ローカルネットワークかVPNで接続していることが前提となります。
やってみた
クライアント環境
検証環境のクライアント端末のOSは以下の通りです。
項目 | バージョン |
---|---|
macOS BigSur | 11.6.3 |
やり方その① ~/.ssh/configに記述
config
の書き方は前回とほぼ同様の内容です。
社内プロキシサーバ経由の設定は、ハイライトした行となります。
# ログインするサーバ毎にHostを記載 # Hostの名前は任意で設定可能 Host bastion # 踏み台サーバのパブリックIP(DNS名でも指定可能) HostName xxx.xxx.xxx.xxx # sshポート番号(省略可能) Port 22 # ログインするユーザ名 User ec2-user # 社内プロキシサーバ経由 ProxyCommand nc -x [社内プロキシサーバのDNS名 or IP]:[社内プロキシサーバのポート] %h %p # ローカル端末に保存した、踏み台サーバの秘密鍵のパス指定 IdentityFile ~/path/bastion.pem Host private # プライベートサーバのプライベートIP(DNS名でも指定可能) HostName xxx.xxx.xxx.xxx # sshポート番号(省略可能) Port 22 # ログインするユーザ名 User ec2-user # 踏み台サーバを経由してログイン ProxyCommand ssh bastion -W %h:%p # ローカル端末に保存した、プライベートサーバの秘密鍵のパス指定 IdentityFile ~/path/private.pem
プライベートサーバには、以下のコマンドで簡単にSSH接続することができます。
ssh private
やり方その② ProxyCommandにてワンライナーでSSH接続
~/.ssh/config
を既に利用している等で記述が困難な場合は、以下のコマンドのみでプライベートサーバへSSH接続することも可能です。
ただ、ワンライナーで実行しているため、多少コマンドが複雑になっております。
ssh -o ProxyCommand=\ "ssh -i ~/path/bastion.pem -W %h:%p ec2-user@踏み台サーバのパブリックIP \ -o ProxyCommand='nc -x [社内プロキシサーバのDNS名 or IP]:[社内プロキシサーバのポート] 踏み台サーバのパブリックIP 踏み台サーバのSSHポート'" \ -i ~/path/private.pem ec2-user@プライベートサーバのプライベートIP
ワンライナーのProxyCommandをもっとスマートに書けなかったのか?
以下のように~/.ssh/config
と同様なProxyCommand
の設定でも検証してみました。
ssh -o ProxyCommand=\ "ssh -i ~/path/bastion.pem -W %h:%p ec2-user@踏み台サーバのパブリックIP \ -o ProxyCommand='nc -x [社内プロキシサーバのDNS名 or IP]:[社内プロキシサーバのポート] %h %p'" \ -i ~/path/private.pem ec2-user@プライベートサーバのプライベートIP
しかし、%h %p
はProxyCommandをネストして記載すると文字列の置き換えができないせいか、以下のようなエラーが出力されてしまいました。
nc: read failed (7/10): Broken pipe kex_exchange_identification: Connection closed by remote host kex_exchange_identification: Connection closed by remote host
参考ブログ
まとめ
社内プロキシサーバも経由しなくてはいけない場合でも、~/.ssh/config
やワンライナーのコマンドでSSH接続できることがわかりました。
~/.ssh/config
で記載した方が、SSH接続用のコマンドが簡単になるため、まずはこちらでの設定を検討して頂くのが良いかと思います。
この記事が、どなたかのお役に立てば幸いです。それでは!